import 'package:dio/dio.dart';

import '../utils/AuthService.dart';

class ApiResponseInterceptor extends Interceptor {
  final AuthService _authService = AuthService();

  @override
  void onResponse(Response response, ResponseInterceptorHandler handler) {
    // 统一处理响应数据
    if (response.data is Map<String, dynamic>) {
      final data = response.data as Map<String, dynamic>;

      // 检查是否是标准的 BaseBean 格式
      if (data.containsKey('code') && data.containsKey('data')) {
        final code = data['code'] as int?;
        final success = data['success'] as bool?;

        if (code == 9999) {
          // 发送重新登录通知
          _authService.notifyReLoginRequired();

          // 可以选择抛出特定异常
          handler.reject(
            DioException(
              error: '需要重新登录',
              response: response,
              type: DioExceptionType.badResponse,
              requestOptions: response.requestOptions,
            ),
          );
          return;
        }
        // 如果请求失败，可以在这里统一处理
        if (success == false || (code != null && code != 200)) {
          // 可以在这里抛出自定义异常
        }
      }
    }
    super.onResponse(response, handler);
  }

  @override
  void onError(DioException err, ErrorInterceptorHandler handler) {
    // 统一处理错误
    switch (err.type) {
      case DioExceptionType.connectionTimeout:
      case DioExceptionType.sendTimeout:
      case DioExceptionType.receiveTimeout:
      // 超时处理
        break;
      case DioExceptionType.badResponse:
      // HTTP 错误处理
        break;
      case DioExceptionType.cancel:
      // 请求取消处理
        break;
      case DioExceptionType.unknown:
      // 未知错误处理
        break;
      default:
      // 其他错误处理
        break;
    }

    super.onError(err, handler);
  }
}
